﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using QuanCafe_DAO_WS;

namespace QuanCafe
{
    public class BanUongDAO : DataProvider
    {
        

        // viết hàm lấy lên danh sách bàn uống
        public List<BanUongDTO> BU_LayDanhSachBanUong()
        {
            try
            {
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // lấy ra danh sách các bàn uống hiện có
                var BanUongs = data.BanUongs.Where(temp => true);
                // tạo biến trả về
                List<BanUongDTO> banUongs = new List<BanUongDTO>();
                foreach (BanUong bu in BanUongs)
                {
                    object obj = GetDataFromDataContext(bu);
                    banUongs.Add((BanUongDTO)obj);
                }
                return banUongs;

            }
            catch
            {
                return null;
            }

        }

        // viết hàm thêm bàn uống
        public bool BU_ThemBanUong(string maban)
        {
            try
            {
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // kiểm tra
                if (BU_DaTonTaiBanUong(maban) == false)
                {
                    BanUong bu = new BanUong();
                    bu.masoban = maban;
                    bu.tinhtrang = 0;
                    data.BanUongs.InsertOnSubmit(bu);
                    data.SubmitChanges();
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }

        // viết hàm cập nhật tình trạng bàn uống
        public bool BU_CapNhatTinhTrang(string maban, int tinhtrang)
        {
            try
            {
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // kiểm tra
                if (BU_DaTonTaiBanUong(maban) == true)
                {
                    // lấy ra bàn uống
                    BanUong bu = data.BanUongs.Single(temp => temp.masoban == maban);
                    // cập nhật
                    bu.tinhtrang = tinhtrang;
                    data.SubmitChanges();
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }

        // viết hàm xóa bàn uống
        public bool BU_XoaBanUong(string maban)
        {
            try
            {
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // kiểm tra
                if (BU_DaTonTaiBanUong(maban) == true)
                {
                    // lấy ra bàn uống
                    BanUong bu = data.BanUongs.Single(temp => temp.masoban == maban);
                    // cập nhật
                    data.BanUongs.DeleteOnSubmit(bu);
                    data.SubmitChanges();
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }

        // viết hàm tra bàn uống theo mã bàn
        public List<BanUongDTO> BU_TraBanUongTheoMa(string maban)
        {
            try
            {
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // lấy ra danh sách
                var BanUongs = data.BanUongs.Where(temp => temp.masoban.StartsWith(maban) == true);
                // tạo biến trả về
                List<BanUongDTO> banUongs = new List<BanUongDTO>();
                foreach (BanUong bu in BanUongs)
                {
                    object obj = GetDataFromDataContext(bu);
                    banUongs.Add((BanUongDTO)obj);
                }
                return banUongs;

            }
            catch
            {
                return null;
            }
        }

        // viết hàm tra bàn uống theo tình trạng
        public List<BanUongDTO> BU_TraBanUongTheoTinhTrang(int tinhtrang)
        {
            try
            {
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // lấy ra danh sách
                var BanUongs = data.BanUongs.Where(temp =>  temp.tinhtrang == tinhtrang);
                // tạo biến trả về
                List<BanUongDTO> banUongs = new List<BanUongDTO>();
                foreach (BanUong bu in BanUongs)
                {
                    object obj = GetDataFromDataContext(bu);
                    banUongs.Add((BanUongDTO)obj);
                }
                return banUongs;

            }
            catch
            {
                return null;
            }
        }

        // viết lại hàm GetDataFromDataRow
        private object GetDataFromDataContext(BanUong bu)
        {
            BanUongDTO banUongDTO = new BanUongDTO();
            banUongDTO.Masoban = bu.masoban;
            banUongDTO.Tinhtrang = (int)bu.tinhtrang;
            // trả về kiểu object
            return (object)banUongDTO;

        }

        // viết hàm kiểm tra bàn uống
        public bool BU_DaTonTaiBanUong(string maban)
        {
            try
            {
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // lấy ra danh sách bàn uống đã có
                var banUongs = data.BanUongs.Where(temp=>true);
                // kiểm tra
                if (banUongs.Any(temp => temp.masoban == maban))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }

    }
}
